import { defineStore } from 'pinia'
import {Todo} from "@/types/Todo";
import {Random} from "mockjs";
import {readTodos, saveTodos} from "@/utils/localStorageUtils";

export const defaultStore = defineStore('defaultStore', {
    // 存放全局数据
    state: () => {
        return {
            // 任务列表中的数据类型
            viewKey: 'all' as string,
            // 输入框的中数据
            inputVal: '' as string,
            todos: [] as Todo[]
        }
    },
    // 动态计算属性，监听state中的数据，返回关联的数据
    getters: {
        // 放回对应类型的任务列表
        todosList: (state) => {
            if (state.viewKey === 'all') return state.todos
            if (state.viewKey === 'unDone') return state.todos.filter(item => !item.done)
            if (state.viewKey === 'done') return state.todos.filter(item => item.done)
        },
        // 返回完成的任务的数量
        doneNum: (state) => {
            let num = 0
            state.todos.forEach(item => {
                if (item.done) num++
            })
            return num
        },
        // 返回总任务的数量
        totalNum: (state) => {
            return state.todos.length
        }
    },
    // 操作state中的数据，也可以使用异步方法
    actions: {
        // 添加任务到任务列表
        addTodos() {
            this.todos.unshift({ id: Number.parseInt(Random.id()), content: this.inputVal, done: false })
        },
        // 清除任务列表中已完成的任务
        clearDonTodo() {
            this.todos = this.todos.filter(item => !item.done)
        },
        // 保存任务列表的数据到localStorage
        onSaveTodos () {
            saveTodos(this.todos)
        },
        // 读取localStorage中的数据到全局数据
        onReadTodos() {
            this.todos = readTodos()
        }
    }
})
